package com.baiduspring.utils.date;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * <div style="color:green;font-weight: bolder;">
 * <h3></h3>
 * &emsp;&emsp;描述：时间工具类
 * </div>
 *
 * @author xiongyan
 * @author
 * @author
 * @date 2016年3月8日 下午5:18:42
 * @history <add>
 * @functionName
 * @date 2016年3月8日 下午5:18:42
 * @remark </add>
 * <upd>
 * @functionName
 * @date 2016年3月8日 下午5:18:42
 * @remark </upd>
 */
public class DateUtils {

    /**
     * <div style="color:green;font-weight: bolder;">
     * <h3></h3>
     * &emsp;&emsp;描述：毫秒换算为妙
     * </div>
     *
     * @param
     * @return
     * @throws
     * @author xiongyan
     * @date 2016年3月8日下午5:19:00
     */
    public static Double ms2second(Serializable time) {
        return Double.parseDouble(String.valueOf(time)) / 1000;
    }

    /**
     * <div style="color:green;font-weight: bolder;">
     * <h3></h3>
     * &emsp;&emsp;描述：将时期按照指定的格式转换为字符串形式。
     * </div>
     *
     * @param
     * @return
     * @throws
     * @author xiongyan
     * @date 2016年3月18日下午8:22:23
     */
    public static String formatDate2String(Date date, String format) {
        return new SimpleDateFormat(format).format(date);
    }

    /**
     * <div style="color:green;font-weight: bolder;">
     * <h3></h3>
     * &emsp;&emsp;描述：将时间格式化为字符串，默认格式为：yyyy-MM-dd HH:mm:ss
     * </div>
     *
     * @param
     * @return
     * @throws
     * @author xiongyan
     * @date 2016年3月18日下午8:23:38
     */
    public static String formatDate2String(Date date) {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    }

    /**
     * <div style="color:green;font-weight: bolder;">
     * <h3></h3>
     * &emsp;&emsp;描述：将时间（当前时间）格式化为字符串，默认格式为：yyyy-MM-dd HH:mm:ss
     * </div>
     *
     * @return 返回格式化后的日期字符串
     * @author xiongyan
     * @date 2017年07月23日下午13:46
     */
    public static String formatDate2String() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }

    /**
     * 格式化时期格式的字符串
     *
     * @return
     */
    @SuppressWarnings("deprecation")
    public static String formatDateString(String date, String format) {
        SimpleDateFormat s = new SimpleDateFormat(format);
        Date d5 = new Date(date);
        date = s.format(d5);
        return date;
    }

    /**
     * 格式化时期格式的字符串。默认格式：yyyy-MM-dd HH:mm:ss
     *
     * @param date
     * @return
     */
    @SuppressWarnings("deprecation")
    public static String formatDateString(String date) {
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d5 = new Date(date);
        date = s.format(d5);
        return date;
    }

    /**
     * <div style="color:green;font-weight: bolder;">
     * <h3></h3>
     * &emsp;&emsp;描述：计算两个时间之间相差的天数
     * </div>
     *
     * @param
     * @return
     * @throws
     * @author xiongyan
     * @date 2016年3月18日下午8:23:38
     */
    public static int daysBetween(Date startDate, Date endDate) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        try {
            startDate = format.parse(format.format(startDate));
            endDate = format.parse(format.format(endDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(endDate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);

        return Integer.parseInt(String.valueOf(between_days));
    }

    /**
     * 计算两个时间只差是否已经超过指定的时间间隔。
     * 如果返回值大于1，则表示超过了指定的时间间隔，否则没有超过
     *
     * @param startDate
     * @param endDate
     * @param num       指定的时间间隔。单位：分钟
     * @return
     */
    public static int minutesBetween(Date startDate, Date endDate, int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        long start = cal.getTimeInMillis();
        cal.setTime(endDate);
        long end = cal.getTimeInMillis();
        long result = (end - start) / (1000 * 60 * num);

        return Integer.parseInt(String.valueOf(result));
    }

    /**
     * 当前时间加上指定毫秒数后的时间
     *
     * @param minute 指定分钟数  1s == 1000ms
     * @return 相加后的时间毫秒值
     */
    public static Long add(Integer minute) {
        Calendar nowTime = Calendar.getInstance();
        nowTime.add(Calendar.MINUTE, minute);
        return nowTime.getTimeInMillis();
    }

    /**
     * 将时间戳转为时间对象
     *
     * @param ms 时间毫秒值
     * @return 返回转换后的时间对象
     */
    public static Date ms2Date(Long ms) {
        return new Date(ms);
    }

}